package com.ruoyi.common.core.utils;

import com.ruoyi.common.core.exception.ServiceException;

/**
 * @Description: 参数检查工具类
 * @author: SampertZh
 * @date: 2022/07/08
 */
public class ParamUtils {

    private ParamUtils() {}

    /**
     * Long类型参数检查
     * @param name 参数名
     * @param value 参数值
     * @param min 最小值
     * @param max 最大值
     * @param must 是否必须
     */
    public static void checkLong(Long value, String name, Long min, Long max, boolean must) {
        if (must && value == null) {
            throw new ServiceException(name + "不能为空！");
        }
        if (value != null) {
            if (value < min || value > max) {
                throw new ServiceException(String.format("%s取值范围：%s-%s", name, min, max));
            }
        }
    }

    /**
     * Long类型参数检查
     * @param name 参数名
     * @param value 参数值
     */
    public static void checkLong(Long value, String name) {
        checkLong(value, name, 1L, Long.MAX_VALUE, true);
    }

    /**
     * Integer类型参数检查
     * @param name 参数名
     * @param value 参数值
     * @param min 最小值
     * @param max 最大值
     * @param must 是否必须
     */
    public static void checkInteger(Integer value, String name, Integer min, Integer max, boolean must) {
        if (must && value == null) {
            throw new ServiceException(name + "不能为空！");
        }
        if (value != null) {
            if (value < min || value > max) {
                throw new ServiceException(String.format("%s取值范围：%s-%s", name, min, max));
            }
        }
    }

    /**
     * String类型参数检查
     * @param name 参数名
     * @param value 参数值
     * @param maxLength 最长字符数
     * @param must 是否必须
     */
    public static void checkString(String value, String name, int maxLength, boolean must) {
        if (must && StringUtils.isBlank(value)) {
            throw new ServiceException(name + "不能为空！");
        }
        if (StringUtils.isNotBlank(value)) {
            if (value.length() > maxLength) {
                throw new ServiceException(String.format("%s最长%s字符", name, maxLength));
            }
        }
    }
}
